Spatial Filter Bank Design in the Spherical Harmonic Domain¶

Christoph Hold

Input Signal in the Spherical Harmonic Domain¶

2022-02-04T13:04:02.221546 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/

Extract component in $+x$-direction:

Spatial Filter - Beamformer¶

2022-02-04T13:04:02.588736 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/
2022-02-04T13:04:02.977949 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/
2022-02-04T13:04:03.330246 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/
2022-02-04T13:04:03.695266 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/
2022-02-04T13:04:04.716664 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/

From a Set of Beamformers to a Spatial Filterbank¶

  • Cover the full sphere with spatial filters
  • Uniform sector layout, e.g. spherical t-designs
2022-02-04T13:04:05.010950 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/
2022-02-04T13:04:05.507553 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/
2022-02-04T13:04:06.411123 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/
2022-02-04T13:04:06.594444 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/

Problem Formulation¶

The spatial sector weighting $w_\xi(\Omega)$ of sectors $\xi = 1, \dots, J$ shall

preserve amplitude \begin{equation}\label{eq:amp_rec} \sum_{\xi=1}^J \beta_{\mathrm{A}} w_\xi(\Omega) = 1 , \quad \forall \Omega \in \mathbb{S}^2 \quad, \end{equation} or preserve energy \begin{equation}\label{eq:en_rec} \sum_{\xi=1}^J \beta_{\mathrm{E}} w_\xi^2(\Omega) = \sum_{\xi=1}^J \left[\sqrt{\beta_{\mathrm{E}}} w_\xi(\Omega) \right]^2 = 1 , \quad \forall \Omega \in \mathbb{S}^2 \quad, \end{equation}

over all angles $\Omega=[\phi, \theta]$.

For the spatial weighting, axisymmetric beam patterns are described by their $N$ beamforming weights / modal weighting coefficients $c_n$ as \begin{equation}\label{eq:SH_axisymPattern} w(\Theta) = \sum_{n=0}^{N} \frac{2n+1}{4\pi} c_n P_n(\cos(\Theta)) \quad , \end{equation}

where the angle $\Theta = \angle (\Omega, \Omega')$ and $P_n$ the degree $n$ Legendre polynomial.

2022-02-04T13:04:07.495792 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/

In SH domain, applying the spatial filter simplifies under Parseval's relation to \begin{equation} s_\xi = \mathbf{w}_{nm, \xi}^{\mathrm{H}} \mathbf{\sigma}_{nm}^{\mathrm{in}} \quad, \end{equation} with sector signal $s_\xi$ from SH signal $\mathbf{\sigma}_{nm}^{\mathrm{in}}$.

Any axisymmetric SH sector beampattern vector $\mathbf{w}_{nm}$ in sector steering direction $\Omega_\xi$ is given as \begin{equation} \label{eq:SH_pattern} \mathbf{w}_{nm} = \operatorname{diag}_N(\mathbf{c}_n) \, \mathbf{y}_n^m(\Omega_\xi)^\mathrm{H} \quad. \end{equation}

We derived the factors preserving

  • Amplitude \begin{equation}\label{eq:beta_a} \beta_{\mathrm{A}} = \bigg[\sum_{\xi=1}^J w_\xi(\Omega)\bigg]^{-1} = \frac{4\pi}{c_0 \, J} = \frac{\sqrt{4\pi}}{w_{00}\,J} \;. \end{equation}
  • Energy \begin{equation}\label{eq:beta_e} \beta_{\mathrm{E}} = \bigg[\sum_{\xi=1}^J w_\xi^2(\Omega)\bigg]^{-1} = \frac{4\pi}{\mathbf{w}_{nm}^\mathrm{H} \mathbf{w}_{nm}^{} J} \;. \end{equation}

Application¶

2022-02-04T13:04:07.912954 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/

Application - Impulse Response Spatial Analysis¶

RMS:  [0.254 0.22  0.218 0.305 0.22  0.22  0.257 0.22  0.324]
2022-02-04T13:04:08.314179 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/

Sector Analysis

RMS:  [0.518 0.284 0.277 0.278 0.277 0.277]
2022-02-04T13:04:08.757944 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/
2022-02-04T13:04:09.841036 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/

Filterbank¶

Analysis \begin{equation} \bf{s}_\xi = \bf{A} \, \bf{\sigma}_{nm}^{\mathrm{in}} \quad. \end{equation}

Synthesis \begin{equation}\label{eq:SFB_syn} \bf{\sigma}_{nm}^{\mathrm{out}} = \bf{B}^\mathrm{H} \, \bf{s}_\xi \quad. \end{equation}

Reconstruction - Criteria¶

  • Perfect Reconstruction \begin{equation}\label{eq:Criterion_PerfectReconstruction} \sigma_{nm}^{\mathrm{out}}(t) \overset{!}{=} \sigma_{nm}^{\mathrm{in}}(t) , \quad \forall t \quad, \end{equation}

  • Energy Reconstruction \begin{equation}\label{eq:Criterion_EnergyReconstruction} \left< \sigma_{nm}^{\mathrm{out}}(t), \sigma_{nm}^{\mathrm{out}}(t) \right> \overset{!}{=} \left< \sigma_{nm}^{\mathrm{in}}(t), \sigma_{nm}^{\mathrm{in}}(t) \right> \quad. \end{equation}

With

\begin{equation} \mathbf{w}_{nm} = \operatorname{diag}_N(\mathbf{c}_n) \, \mathbf{y}_n^m(\Omega_\xi)^\mathrm{H} \quad, \end{equation}

we can expand the analysis and synthesis matrix as

\begin{equation}\label{eq:def_A} \mathbf{A}_{\xi, nm} = \left[\operatorname{diag}_N(\mathbf{c}_n^{\mathrm{\mathrm{an}}}) \mathbf{Y}^\mathrm{H} \right]^\mathrm{H} = \mathbf{Y} \operatorname{diag}_N(\mathbf{c}_n^{\mathrm{an}}) \quad, \end{equation}

and \begin{equation}\label{eq:def_B} \mathbf{B}_{\xi, nm} = \mathbf{Y} \operatorname{diag}_N(\mathbf{c}_n^{\mathrm{syn}}) \quad. \end{equation}

Reconstruction¶

  • Perfect Reconstruction \begin{equation}\label{eq:synthesisAmp} \mathbf{\sigma}_{nm}^{\mathrm{out}}(t) = \beta_A \mathbf{B}^\mathrm{H} \mathbf{s}_\xi(t) \quad, \end{equation}

  • Energy Reconstruction \begin{equation}\label{eq:synthesisEn} \mathbf{\sigma}_{nm}^{\mathrm{out}}(t) = \sqrt{\beta_E} \mathbf{B}^\mathrm{H} \tilde{\mathbf{s}}_\xi(t) \quad, \end{equation}

where \begin{equation} \mathbf{B}_{\xi, nm} = \mathbf{Y} \operatorname{diag}_N(\mathbf{c}_n^{\mathrm{syn}}) \quad, \text{with} \quad c_n^{\mathrm{syn}} = \frac{1}{c_n^{\mathrm{an}}/c_0^{\mathrm{an}}} \end{equation}

Application¶

Create diffuse signal with shape of input signal.

  • Analyze Ambisonic signal ($N_{sph} = 3$)
  • Replace sector signals
  • Reconstruct to Ambisonic signal, preserving energy
2022-02-04T13:04:11.077030 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/

Sector Analysis

2022-02-04T13:04:11.370618 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/
  • Replace sector signals by new independent white noise sequences
  • Apply spatial bandwith limitation
2022-02-04T13:04:11.557378 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/
/var/folders/c3/kmslgy_s5633b97ysvr59lnh034hk7/T/ipykernel_37052/1308496816.py:6: MatplotlibDeprecationWarning: Auto-removal of grids by pcolor() and pcolormesh() is deprecated since 3.5 and will be removed two minor releases later; please call grid(False) first.
  plt.colorbar()
2022-02-04T13:06:25.004140 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/
2022-02-04T13:04:11.900012 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/

Resynthesis to SH domain¶

Either

  • perfect reconstruction property (e.g. when only applying linear processing) or
  • energy preserving reconstruction (e.g. from decorrelated sector signals)
2022-02-04T13:04:13.884152 image/svg+xml Matplotlib v3.5.0, https://matplotlib.org/

References¶

Hold, C., Politis, A., Mc Cormack, L., & Pulkki, V. (2021). Spatial Filter Bank Design in the Spherical Harmonic Domain. Proceedings of European Signal Processing Conference, August, 106–110.

Hold, C., Schlecht, S. J., Politis, A., & Pulkki, V. (2021). SPATIAL FILTER BANK IN THE SPHERICAL HARMONIC DOMAIN : RECONSTRUCTION AND APPLICATION. IEEE Workshop on Applications of Signal Processing to Audio and Acoustics (WASPAA), 1(1).

In [ ]: